#ifndef GY_GRAPHICSBEZIER_H
#define GY_GRAPHICSBEZIER_H

#include "Graphics/BasicGraphics/GY_BasicsGraphicsObject.h"
#include "Graphics/GY_Object.h"
#include "GY_ControlLibrary_global.h"
#include <QGraphicsPathItem>
#include <QPointF>
#include <QPainter>
#include <QObject>
#include <QDebug>

class GY_CONTROLLIBRARY_EXPORT GY_GraphicsBezier : public GY_BasicsGraphicsObject
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_GraphicsBezier(const QString &guid,QGraphicsItem *parent = nullptr);
    explicit Q_INVOKABLE GY_GraphicsBezier(const QString &guid,
                                           const int precision,
                                           const QPointF point1,
                                           const QPointF ctrl1,
                                           const QPointF ctrl2,
                                           const QPointF point2,
                                           QGraphicsItem *parent = nullptr);
    ~GY_GraphicsBezier();
private:
    /**
     * @brief updatePrecision 更新曲线精度
     * @param name
     * @param value
     * @return
     */
    bool updatePrecision(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint1 更新曲线首节点（默认位于左下角）
     * @param name
     * @param value
     * @return
     */
    bool updatePoint1(const QString &name, const QVariant &value);
    /**
     * @brief updateCtrl1 更新首节点控制点
     * @param name
     * @param value
     * @return
     */
    bool updateCtrl1(const QString &name, const QVariant &value);
    /**
     * @brief updateCtrl2 更新尾节点控制点
     * @param name
     * @param value
     * @return
     */
    bool updateCtrl2(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint2 更新曲线尾节点（默认位于右下角）
     * @param name
     * @param value
     * @return
     */
    bool updatePoint2(const QString &name, const QVariant &value);
    /**
     * @brief updatePath 更新路径
     * @param startPoint 起始点
     * @param endPoint 结束点
     * @param startCtrlPoint 起始控制点
     * @param endCtrlPoint 结束控制点
     * @param precision 精度（对曲线求导数）
     */
    void updatePath(const QPointF &startPoint, const QPointF &endPoint, const QPointF &startCtrlPoint, const QPointF &endCtrlPoint,int precision);
    /**
     * @brief updateDraw 更新绘制
     */
    void updateDraw();
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();

signals:

};

#endif // GY_GRAPHICSBEZIER_H
